home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 13 / AMIGAplus Sonderheft 13 (1998)(ICP)(DE)[!].iso / rexx / invoicetext.rexx < prev    next >
OS/2 REXX Batch file  |  1995-03-21  |  5KB  |  214 lines

  1. /*
  2.         InvoiceText.rexx
  3.         $VER: 14 Mar 1995
  4. */
  5.  
  6. arg iNameCode
  7.  
  8. options results
  9.  
  10. /* Initialize */
  11. Quote = '22'x
  12. cInvoice = 0
  13.  
  14. DataPath = "S:TimeKeep/"
  15.  
  16. if iNameCode = "" then do
  17.     Say ""
  18.     Say "ERROR: No Client Code"
  19.     Say ""
  20.     exit
  21. end
  22.  
  23. /* Read Time Data */
  24. if ~ open('Time', DataPath||iNameCode||".time", 'R') then do
  25.     Say ""
  26.     Say "ERROR: .time NOT FOUND"
  27.     Say ""
  28.     exit
  29. end
  30.  
  31. t = readln('Time')
  32. parse var t '"'Client.NameCode'","'Client.Name'"'
  33.  
  34. /* Collate */
  35. Projects = "|"; nProjects = 0 ; Expenses = 0; Work = 0
  36. do while ~eof('Time')
  37.     t = readln('Time')
  38.     parse var t '"'tType'","'tProject'",'tInfo
  39.  
  40.     if tInfo == "" then leave
  41.  
  42.     if index(Projects, "|"tProject"|") = 0 then do
  43.         /* Project not found */
  44.         Projects = Projects||tProject"|"
  45.         nProjects = nProjects + 1
  46.         Projects.nProjects.Name = tProject
  47.  
  48.         if tType = "T" then do
  49.             Projects.nProjects.count = 1
  50.             Expenses.nProjects.count = 0
  51.             end
  52.         else do
  53.             Projects.nProjects.count = 0
  54.             Expenses.nProjects.count = 1
  55.         end
  56.  
  57.         cProject = nProjects; n = 1
  58.         end
  59.     else do
  60.         /* Project exists */
  61.         do lp = 1 to nProjects
  62.             if Projects.lp.Name = tProject then leave
  63.         end
  64.         cProject = lp
  65.  
  66.         if tType = "T" then do
  67.             Projects.lp.count = Projects.lp.count + 1
  68.             n = Projects.lp.count
  69.             end
  70.         else do
  71.             Expenses.lp.count = Expenses.lp.count + 1
  72.             n = Expenses.lp.count
  73.         end
  74.     end
  75.  
  76.     if tType = "T" then do
  77.         Projects.cProject.n.Info = tInfo
  78.         Work = 1
  79.         end
  80.     else do
  81.         Expenses.cProject.n.Info = tInfo
  82.         Expenses = 1
  83.     end
  84. end
  85.  
  86. call close('Time')
  87.  
  88. if nProjects = 0 then do
  89.     Say ""
  90.     Say "ERROR: NO Logged Time or Expenses"
  91.     Say ""
  92.     exit
  93. end
  94.  
  95. /* Read Invoice Number */
  96. if open('Invoice', DataPath||Client.NameCode||".invoice", 'R') then do
  97.     cInvoice = readln('Invoice')
  98.     call close('Invoice')
  99. end
  100.  
  101. cInvoice = cInvoice + 1
  102.  
  103. Client.Invoice = right(cInvoice, 2, "0")
  104.  
  105. /* Create Invoice */
  106. call open('Out', DataPath"/TimeKeep/Invoice."Client.NameCode''Client.Invoice, 'W')
  107.  
  108. /* Invoice # */
  109. call writeln('Out', "Invoice #"Client.NameCode''Client.Invoice)
  110.  
  111. /* Client Name */
  112. 'Type' Client.Name
  113. call writeln('Out', Client.Name)
  114. call writeln('Out', "")
  115.  
  116. /* Date */
  117. call writeln('Out', date())
  118. call writeln('Out', "")
  119. call writeln('Out', "")
  120.  
  121. /* Work Description */
  122. call writeln('Out', "== WORK ===============================")
  123. call writeln('Out', "")
  124.  
  125. /* Work Description - Projects */
  126.  
  127. do lp = 1 to nProjects
  128.     if Projects.lp.Name ~= "" then do
  129.         call writeln('Out', "  "Projects.lp.Name)
  130.         call writeln('Out', "    -")
  131.     end
  132. end
  133.  
  134.  
  135. /* Expenses */
  136. TotalExpenses = 0
  137. if Expenses then do
  138.     call writeln('Out', "")
  139.     call writeln('Out', "== EXPENSES ===========================")
  140.     call writeln('Out', "")
  141.  
  142.     do lp = 1 to nProjects
  143.         if Expenses.lp.count = 0 then iterate
  144.  
  145.         call writeln('Out', "  "Projects.lp.Name)
  146.  
  147.         do lp2 = 1 to Expenses.lp.count
  148.             parse var Expenses.lp.lp2.Info '"'tInfo'","'tAmount'"'
  149.             call writeln('Out', "    "tInfo"  "tAmount)
  150.             TotalExpenses = TotalExpenses + tAmount
  151.         end
  152.     end
  153.  
  154.     call writeln('Out', "")
  155.     call writeln('Out', "    EXPENSES:  $"TotalExpenses)
  156. end
  157.  
  158.  
  159. Total = 0
  160. if Work then do
  161.     call writeln('Out', "")
  162.     /* Work Hours */
  163.     call writeln('Out', "== WORK HOURS =========================")
  164.     call writeln('Out', "")
  165.  
  166.     do lp = 1 to nProjects
  167.         if Projects.lp.count = 0 then iterate
  168.  
  169.         call writeln('Out', "  "Projects.lp.Name)
  170.  
  171.         HSubTotal = 0
  172.         do lp2 = 1 to Projects.lp.count
  173.             parse var Projects.lp.lp2.Info '"'tDate'","'tT1'","'tT2'","'tH'","'tRate'"'
  174.             call writeln('Out', "    "tDate"  "tT1"  -  "tT2"  "tH)
  175.             HSubTotal = HSubTotal + tH
  176.         end
  177.  
  178.         SubTotal = trunc(HSubTotal * tRate + .5e-2, 2)
  179.  
  180.         call writeln('Out', "      "HSubTotal" @ $"tRate" / hour:   "SubTotal)
  181.         Total = Total + SubTotal
  182.     end
  183.  
  184.     call writeln('Out', "")
  185.     call writeln('Out', "    WORK:  $"Total)
  186. end
  187.  
  188. call writeln('Out', "")
  189. call writeln('Out', "=======================================")
  190. call writeln('Out', "")
  191.  
  192. Total = Total + TotalExpenses
  193. call writeln('Out', "    TOTAL:  $"Total)
  194.  
  195. call writeln('Out', "")
  196. call writeln('Out', "=======================================")
  197. call writeln('Out', "")
  198. call writeln('Out', "Payment To:")
  199. call writeln('Out', "")
  200. call writeln('Out', "scott dhomas trenn")
  201. call writeln('Out', "797 Mitchell Street, Fredericton, NB   E3B 3S8")
  202. call writeln('Out', "(506) 459-7088")
  203. call close('Out')
  204.  
  205. /* Write Invoice Number */
  206. call open('Invoice', DataPath||Client.NameCode||".invoice", 'W')
  207. call writeln('Invoice', cInvoice)
  208. call close('Invoice')
  209.  
  210. /* Backup .time data file */
  211. ADDRESS COMMAND 'C:Rename' DataPath||Client.NameCode||".time" DataPath||Client.NameCode||".time."Client.Invoice
  212.  
  213. exit
  214.